// src/utils/websocket.js
let socketTask = null
let isConnected = false
let heartbeatInterval = null
let lastHeartbeatTime = 0
let currentUrl = null

export const useWebSocket = () => {
  // 建立连接
  const connect = (url) => {
    currentUrl = url // 保存当前连接URL
    return new Promise((resolve, reject) => {
      if (isConnected) {
        resolve('已连接')
        return
      }
      socketTask = uni.connectSocket({
        url: url,
		header: {
			Authorization: uni.getStorageSync('token') ? `Bearer ${uni.getStorageSync('token')}` : ''
		},
        success: () => {
          console.log('WebSocket 连接创建中...')
        },
        fail: (err) => {
			console.log('连接中失败',err)
          reject(err)
        }
      })

      // 监听连接成功
      socketTask.onOpen(() => {
        isConnected = true
        resolve('连接成功')
        
        // 启动心跳机制（30秒间隔）
        startHeartbeat()
      })

      // 监听错误
      socketTask.onError((err) => {
        console.error('WebSocket 错误:', err)
        reject(err)
      })

      // 监听连接关闭
      socketTask.onClose((res) => {
        isConnected = false
        console.log('WebSocket 连接关闭', res)
        stopHeartbeat()
      })
    })
  }

  // 启动心跳定时器
  const startHeartbeat = () => {
    // 发送心跳包（每30秒）
    heartbeatInterval = setInterval(() => {
      send({ type: 'ping' })
      lastHeartbeatTime = Date.now()
    }, 28000)
	console.log('当前时间',lastHeartbeatTime)
	console.log('发送时的时间',Date.now())
	console.log('剩余时间',Date.now() - lastHeartbeatTime)
    // 心跳超时检测（每10秒检查）
  //   setInterval(() => {
  //     const now = Date.now()
  //     if (now - lastHeartbeatTime > 60000 && isConnected) {
  //       console.warn('心跳超时，尝试重连...')
		// isConnected = false
  //       reconnect()
  //     }
  //   }, 29000)
  }

  // 停止心跳定时器
  const stopHeartbeat = () => {
    if (heartbeatInterval) {
      clearInterval(heartbeatInterval)
      heartbeatInterval = null
    }
  }

  // 自动重连
  // const reconnect = () => {
  //   stopHeartbeat()
  //   setTimeout(() => {
  //     connect(currentUrl).catch(err => console.error('重连失败:', err))
  //   }, 3000) // 3秒后重试
  // }

  // 发送消息（保持原有逻辑）
  const send = (data) => {
	  console.error('WebSocket 未连接1',data)
    if (!isConnected) {
      console.error('WebSocket 未连接')
      return
    }
	console.error('WebSocket 未连接2',data)
    socketTask.send({
      data: JSON.stringify(data),
      success: () => {
        console.log('消息发送成功')
      },
      fail: (err) => {
        console.error('消息发送失败:', err)
      }
    })
  }

  // 接收消息（添加心跳响应处理）
  const onMessage = (callback) => {
    socketTask.onMessage((res) => {
      const data = JSON.parse(res.data)
      
      // 如果是心跳响应，更新最后心跳时间
      if (data.type === 'heartbeat_response') {
        lastHeartbeatTime = Date.now()
      }
      
      callback(data)
    })
  }

  // 关闭连接
  const close = () => {
    if (socketTask && isConnected) {
      socketTask.close({
        success: () => {
          isConnected = false
          stopHeartbeat()
          console.log('WebSocket 已关闭')
        }
      })
    }
  }

  return { connect, send, onMessage, close }
}